[Feat] Give Fast mode deployment MCP access - #1604
Merged
Merged
Conversation
Contributor
|
No code issues found. See task
Reviewed a2748ad |
Contributor
Author
Implemented the expanded Fast MCP architecture and pushed it in Fast now receives the actor-resolved remote MCP server set used by tasks, custom automations come through the canonical Roomote MCP contract, parent automation mutations require no acknowledgement, duplicate calls are fenced per turn, and destructive automation management remains unavailable to advisor/judge subagents. The addressed review threads are resolved and the PR metadata is refreshed. |
- Exclude user-scoped curated integrations from Fast config resolution; their API proxies reject control-plane auth tokens, so they failed discovery on every turn. - Re-mint the broker auth token at integration call time for deployment-proxy endpoints instead of reusing the short-lived list-time token, which expired mid-turn on long turns. - Pass a consistent apiBaseUrl through parent-event Fast turns so the broker's origin check keeps injecting proxy auth on split-origin deployments. - Add an onError handler and safe JSON parsing to the in-process custom-automations app so router failures surface as structured tool errors, and keep the numeric HTTP status from being clobbered by a response body's own status field. - Return early from integration listing when no MCP servers or GitHub installation exist, restoring the pre-existing quiet no-op path. - Warn when a Fast surface provides no MCP config resolver instead of silently serving zero deployment servers. - Prune expired per-user entries from the integration tool cache. - Silence the per-connection config-resolution info logging on the per-turn Fast path. - Document Fast-mode automation management and MCP server access.
- Extract buildManageCustomAutomationsRequest into @roomote/types so the worker MCP server and the API-hosted tool map actions onto the custom-automations REST routes from one source instead of two hand-kept switches (which had already drifted on body filtering). - Extract a shared in-process API invocation helper for MCP tool handlers; the member tools and custom-automations tool now share the auth-impersonation app, onError handler, safe JSON parsing, and status-preserving error shape (member tools previously lacked the error handler and let response bodies clobber the HTTP status). - Add ROOMOTE_MCP_ID and MCP proxy path-prefix constants to @roomote/types and use them at every producer and consumer, so the security-relevant 'roomote' gating and deployment-proxy detection cannot silently diverge from the URLs being built. - Collapse createRoomoteMcpServer's two identical auth params into one plus a boolean. - Route Discord and parent-event Fast surfaces through the canonical resolveApiBaseUrl fallback chain instead of inline env fallbacks.
The Discord handlers and fast-agent parent event now import resolveApiBaseUrl from @roomote/cloud-agents/server, and these tests replace that module with a factory mock, so the missing export made the handler throw at call time.
Instead of excluding user-scoped curated integrations from Fast config resolution, accept user auth tokens at every integration proxy. The proxy's credential resolution is actor-scoped in both directions: a deployment-scoped integration uses the org-wide connection, and a user-scoped integration only ever resolves the connection owned by the token holder, so a Fast user reaches exactly their own Neon/Supabase/ monday.com connection and nobody else's. Adds proxy regression tests for both the accepted and default-rejected auth-token paths.
mrubens
marked this pull request as ready for review
August 24, 2026 21:52
mrubens
requested review from
brunobergher,
daniel-lxs and
mrubens
as code owners
August 24, 2026 21:52
This was referenced Aug 24, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changed
manage_custom_automationscontract into@roomote/types, registered it on the worker and API-hosted Roomote MCP servers, and removed the duplicated Fast-native automation schema and adapter.Why this change was made
Fast mode previously exposed a hand-built subset of deployment integrations and needed a separate native tool to manage custom automations. Reusing the task MCP resolver and canonical Roomote MCP contract gives Fast the configured deployment tool surface without duplicating schemas, authorization, or persistence logic.
Impact
Fast conversations can use deployment-configured remote MCP servers with the same acting-user and deployment semantics as tasks. Deployment administrators can manage custom automations through the Roomote MCP, while non-admin users, disabled tools, local stdio servers, and destructive subagent calls remain denied by their existing boundaries.